package cn.king.springframework.beans.factory.support;


import cn.king.springframework.beans.BeanException;
import cn.king.springframework.beans.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * 实例化策略
 */
public interface InstantiationStrategy {
    /**
     * 根据给定的BeanDefinition和构造函数、参数信息构造具体的Bean实例,根据常见的实现方式，只要有jdk再带的
     * 的反射方式和Cglib字节码方式
     * @param beanDefinition
     * @param beanName
     * @param ctor
     * @param args
     * @return
     * @throws BeanException
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor, Object[] args) throws BeanException;
}
